import axios from 'axios'
import {
    message
} from '@/utils/message'
import {
    clearAuth,
    getToken
} from '@/utils/auth'
import router from '@/router'

const request = axios.create({
    baseURL: '/api',
    timeout: 5000,
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    }
})

// 请求拦截器 - 添加token到请求头
request.interceptors.request.use(
    config => {
        const token = getToken()
        if (token) {
            config.headers.Authorization = token
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        const res = response.data

        // 业务状态码为200，代表请求成功
        if (res.code === 200) {
            return res.data
        }

        // 业务状态码为401，代表未登录
        if (res.code === 401) {
            message.error('请先登录')
            clearAuth() // 清除认证信息
            router.push('/login')
            return Promise.reject(new Error('未登录'))
        }

        // 其他业务错误情况
        message.error(res.message || '操作失败')
        return Promise.reject(new Error(res.message || '操作失败'))
    },
    error => {
        // 处理HTTP错误状态
        let errorMessage = '服务异常'
        if (error.response) {
            // 处理HTTP状态码
            switch (error.response.status) {
                case 403:
                    errorMessage = '拒绝访问'
                    break
                case 404:
                    errorMessage = '请求地址出错'
                    break
                case 500:
                    errorMessage = '服务器内部错误'
                    break
                default:
                    errorMessage = error.response.data && error.response.data.message || '服务异常'
            }
        }
        message.error(errorMessage)
        return Promise.reject(error)
    }
)

export default request